import { globalIgnores } from 'eslint/config'
import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
import pluginVue from 'eslint-plugin-vue'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'

// To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
// import { configureVueProject } from '@vue/eslint-config-typescript'
// configureVueProject({ scriptLangs: ['ts', 'tsx'] })
// More info at https://github.com/vuejs/eslint-config-typescript/#advanced-setup

export default defineConfigWithVueTs(
  {
    name: 'app/files-to-lint',
    files: ['**/*.{ts,mts,tsx,vue}'],
  },

  globalIgnores(['**/dist/**', '**/dist-ssr/**', '**/coverage/**', '**/node_modules/**']),

  pluginVue.configs['flat/essential'],
  vueTsConfigs.recommended,
  skipFormatting,
  // 自定义规则
  {
    rules: {
      // 修复组件命名问题：允许单数名称如 Login
      'vue/multi-word-component-names': 'off',
      // 属性名使用连字符（kebab-case）：my-prop="value"
      'vue/attribute-hyphenation': ['error', 'always'],
      // 组件名使用PascalCase（首字母大写）：<MyComponent>
      'vue/component-name-in-template-casing': ['error', 'PascalCase'],
      // 事件名使用kebab-case：@my-event="handler"
      'vue/custom-event-name-casing': ['error', 'kebab-case'],
      // 强制props使用驼峰命名（JS中）：myProp
      'vue/prop-name-casing': ['error', 'camelCase'],
      // 禁止使用console（生产环境）
      'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'warn',
      // 禁止使用debugger（生产环境）
      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'warn',
      // 强制使用===和!==
      eqeqeq: ['error', 'smart'],
      // 强制变量使用驼峰命名
      camelcase: ['error', { properties: 'always' }],
      // 强制箭头函数参数使用括号：当参数多于一个时
      'arrow-parens': ['error', 'as-needed'],
      // 强制一致的数组方法使用（使用includes而不是indexOf）
      'unicorn/prefer-includes': 'error',
    },
  },
)
